package sk.velkavrana.app.service.impl;

import de.onoffshoresoft.judie.cmd.JUDIECmd;
import sk.velkavrana.app.model.ConnectionInfo;
import sk.velkavrana.app.service.ExportService;
import sk.velkavrana.app.service.sharedData.ExportDataListener;
import sk.velkavrana.app.service.sharedData.ProgressEvent;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * @author mtymes
 * @since May 25, 2009 4:00:38 AM
 */
public class ExportServiceImpl implements ExportService {

    public void exportData(ConnectionInfo connectionInfo, Set<String> tables, String directory, ExportDataListener listener) {
        List<String> arguments = new ArrayList<String>();

        arguments.add("-e");
        arguments.add("-d");
        arguments.add(connectionInfo.getDriver());
        arguments.add("-c");
        arguments.add(connectionInfo.getUrl());
        arguments.add("-u");
        arguments.add(connectionInfo.getLogin());
        arguments.add("-p");
        arguments.add(connectionInfo.getPassword());

        String timeSuffix = new SimpleDateFormat("yyMMdd-HHmmss").format(new Date());

        File dir = new File(directory + File.separator + timeSuffix);
        dir.mkdir();

        int index = 0;
        listener.progressUpdate(new ProgressEvent(index++, tables.size()));
        for (String table : tables) {
            listener.updateStatus("exporting table: " + table);

            String[] tokens = table.split("\\.");
            String shortTableName = tokens[tokens.length - 1];

            arguments.add("-t");
            arguments.add(table);
//            arguments.add(dir.getAbsolutePath() + File.separator + shortTableName + "-" + timeSuffix + ".xml");
            arguments.add(dir.getAbsolutePath() + File.separator + shortTableName + ".xml");

            String[] args = arguments.toArray(new String[arguments.size()]);

            JUDIECmd.main(args);

            arguments.remove(arguments.size() - 1);
            arguments.remove(arguments.size() - 1);
            arguments.remove(arguments.size() - 1);

            listener.progressUpdate(new ProgressEvent(index++, tables.size()));
        }
    }
}
